package ar.com.solidussource.framework.backend.dao.filter;

import org.hibernate.Criteria;

/**
 * Filtro generico utlizado para realizar consultas con criterias a objetos
 * persistentes utilizandoel dao generico de hibernate. Las aplicaciones que
 * deseen utilizar los {@link GenericCRUDDao} deben utilizar este Filter
 * (implementadolo con una clase propia) para agregar las restricciones de
 * busqueda necesarias de acuerdo al caso<br>
 * Este filtro ademas puede ser utilizado en conjunto con el {@link Page} y
 * {@link Result} para realizar consultas paginadas
 */
public interface Filter {

	/**
	 * Llena los datos del criteria de acuerdo a las restricciones que tenga el
	 * filtro internamente, las aplicaciones puede realizar cualquier tipo de
	 * filtro dentro del criteria.<br>
	 * Tambien pueden setear el orden en el que deben ser retornados los
	 * resultados, en caso de que no se setee el orden se utiliza el defautl de
	 * hibernate. En SQL Server 2005 no se puede usar Order By en el criterio
	 * ya que el framework utiliza este metodo para calcular el total de filas 
	 * y provoca un error. Agregar en el metodo {@link fillCriteriaNotSuportInProjection}
	 * las condiciones no soportadas.
	 * 
	 * @param criteria
	 */
	public void fillCriteria(Criteria criteria);
	
	/**
	 * Algunos motores no soportan hacer projection con order by u otras
	 * sentencias. (Ej: SQL Server 2005)
	 * Si el criterio a utilizar usa order by se debe implementar en este metodo que
	 * no es utilizado al calcular el count(). 
	 * 
	 * @param criteria
	 */
	public void fillCriteriaNotPagination(Criteria criteria);	
	
	public void setTableOrder(TableOrder tableOrder);
}
